Read in and tidy the data
The following code:
Looking at stops over time
# Number of stops per day
stop_frisk_df %>%
group_by(date_stop) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = date_stop, y = count)) +
geom_point() +
geom_smooth(se = FALSE)
# Number of stops per month
stop_frisk_df %>%
mutate(
month_stop = factor(month(date_stop))
) %>%
filter(
month_stop != is_null(month_stop)
) %>%
group_by(month_stop) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = month_stop, y = count)) +
geom_bar(stat = "Identity")
# Number of stops per day (broken down by boro)
stop_frisk_df %>%
mutate(
month_stop = month(date_stop)
) %>%
filter(
month_stop != is_null(month_stop)
) %>%
group_by(month_stop, boro) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = month_stop, y = count, color = boro)) +
geom_point() +
geom_smooth(se = FALSE)
# Number of stops per hour over the day
stop_frisk_df %>%
mutate(
hour_stop = hour(time_stop),
part_of_day = cut(hour_stop, breaks = c(0, 5, 12, 17, 21, 24), labels = c("Night", "Morning", "Afternoon", "Evening", "Night"), right = FALSE)
) %>%
select(hour_stop, part_of_day) %>%
group_by(hour_stop, part_of_day) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = hour_stop, y = count)) +
geom_bar(stat = "Identity", aes(fill = part_of_day)) +
geom_smooth(se = FALSE)
# Number of stops per hour over the day (broken down by boro)
stop_frisk_df %>%
mutate(
hour_stop = hour(time_stop)
) %>%
group_by(hour_stop, boro) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = hour_stop, y = count, color = boro)) +
geom_point() +
geom_smooth(se = FALSE)
This code chunk looks at the number of people stopped, frisked, frisked & searched, and searched over a single day
stop_frisk_df %>%
filter(date_stop != is.na(date_stop)) %>%
mutate(
hour_stop = hour(time_stop)
) %>%
group_by(hour_stop, frisked, searched) %>%
summarize(
count = n()
) %>%
pivot_wider(
names_from = frisked:searched,
values_from = count
) %>%
rename(
"stopped" = "0_0",
"frisked" = "1_0",
"searched" = "0_1",
"frisk_and_search" = "1_1"
) %>%
mutate(
searched = replace_na(searched, 0),
stopped = replace_na(stopped, 0),
frisked = replace_na(frisked, 0),
frisk_and_search = replace_na(frisk_and_search, 0),
stopped = stopped + searched + frisked + frisk_and_search
) %>%
ggplot(aes(x = hour_stop, y = stopped)) +
geom_smooth(se = FALSE, color = 'red') +
geom_smooth(aes(y = frisked, color = 'blue'), se = FALSE) +
geom_smooth(aes(y = searched, color = 'green'), se = FALSE) +
geom_smooth(aes(y = frisk_and_search, color = 'yellow'), se = FALSE)
Animated
# Number of stops per hour over the day (broken down by boro)
stop_frisk_df %>%
mutate(
hour_stop = hour(time_stop)
) %>%
group_by(hour_stop, boro) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = hour_stop, y = count, color = boro)) +
geom_point(alpha = 0.7, size = 2) +
geom_smooth(se = FALSE, alpha = 0.7) +
transition_states(
boro,
transition_length = 1,
state_length = 1
) +
enter_fade() +
exit_shrink() +
ggtitle('{closest_state}')
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Animated 2 (option #1)
# Number of stops per day
stop_frisk_df %>%
mutate(
month = month(date_stop),
day = day(date_stop)
) %>%
group_by(month, day) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = day, y = count, color = month)) +
geom_point(size = 2, alpha = 0.7) +
geom_smooth(se = FALSE, alpha = 0.7) +
transition_states(
month,
transition_length = 2,
state_length = 1
) +
enter_fade() +
exit_shrink() +
ggtitle('Month: {closest_state}')
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Animated 2 (option #2)
# Number of stops per day
stop_frisk_df %>%
mutate(
month = month(date_stop)
) %>%
group_by(month, date_stop) %>%
summarize(
count = n()
) %>%
ggplot(aes(x = date_stop, y = count, color = month)) +
geom_point(size = 2, alpha = 0.7) +
geom_smooth(se = FALSE, alpha = 0.7) +
transition_states(
month,
transition_length = 1,
state_length = 1
) +
enter_fade() +
exit_shrink() +
ggtitle('Month: {closest_state}')
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'